package com.smsc.headend.task.engine.builder;

import com.smsc.headend.module.data.entity.DataItem;
import com.smsc.headend.module.data.enums.OperationType;
import com.smsc.headend.module.protocol.BaseRequest;
import com.smsc.headend.module.protocol.cosem.bo.AttributeDescriptor;
import com.smsc.headend.module.protocol.cosem.bo.AttributeDescriptorWithSelection;
import com.smsc.headend.module.protocol.cosem.bo.InvokeIdAndPriority;
import com.smsc.headend.module.protocol.cosem.bo.request.GetRequest;
import com.smsc.headend.module.protocol.cosem.bo.request.impl.GetRequestNormal;
import com.smsc.headend.module.protocol.cosem.bo.request.impl.GetRequestWithList;
import lombok.Data;

import java.util.List;
import java.util.stream.Collectors;

@Data
public class RequestBuilder {

    private String operationType;
    private List<DataItem> dataItemList;

    public  RequestBuilder setOperation(String operationType) {
        this.operationType = operationType;
        return this;
    }

    public RequestBuilder setDataItem(List<DataItem> dataItemList) {
        this.dataItemList = dataItemList;
        return this;
    }

//    public BaseRequest build() {
//        OperationType operationType = OperationType.parse(this.operationType);
//        BaseRequest baseRequest = null;
//        switch (operationType) {
//            case GetRequestNormal:
//                baseRequest = buildGetRequestNormal(dataItemList);
//                break;
//            case GetRequestForNextDataBlock:
//                break;
//            case GetRequestWithList:
//                baseRequest = buildGetRequestWithList(dataItemList);
//                break;
//        }
//
//
//        return baseRequest;
//    }
//
//    private BaseRequest buildGetRequestWithList(List<DataItem> dataItemList) {
//        GetRequest request = new GetRequest();
//        GetRequestWithList requestWithList = new GetRequestWithList();
//        requestWithList.setAttributeDescriptorList(dataItemList.stream().map(dataItem -> {
//            AttributeDescriptorWithSelection attributeDescriptorWithSelection = new AttributeDescriptorWithSelection();
//            AttributeDescriptor ad = new AttributeDescriptor(dataItem.getClassId(), dataItem.getObis(), dataItem.getAttributeId());
//            attributeDescriptorWithSelection.setAttributeDescriptor(ad);
//            return attributeDescriptorWithSelection;
//        }).collect(Collectors.toList()));
//        InvokeIdAndPriority invokeIdAndPriority = new InvokeIdAndPriority();
//        invokeIdAndPriority.setSeq(1);
//        requestWithList.setInvokeIdAndPriority(invokeIdAndPriority);
//        request.setType(GetRequest.GetRequestType.GetRequestWithList.getType());
//        request.setRequest(requestWithList);
//        return request;
//    }
//
//    private BaseRequest buildGetRequestNormal(List<DataItem> dataItemList) {
//        GetRequest request = new GetRequest();
//        DataItem dataItem = dataItemList.get(0);
//        GetRequestNormal normalRequest = new GetRequestNormal();
//        AttributeDescriptor attributeDescriptor = new AttributeDescriptor(dataItem.getClassId(), dataItem.getObis(), dataItem.getAttributeId());
//        InvokeIdAndPriority invokeIdAndPriority = new InvokeIdAndPriority();
//        invokeIdAndPriority.setSeq(1);
//        normalRequest.setAttributeDescriptor(attributeDescriptor);
//        normalRequest.setInvokeIdAndPriority(invokeIdAndPriority);
//        request.setRequest(normalRequest);
//        request.setType(GetRequest.GetRequestType.GetRequestNormal.getType());
//        return request;
//    }
}
